package com.um.springboot.starter.annotation;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 *
 * 访问流量限制 注解类
 *
 * @author 邓南辉
 * @date 2019/12/15
 * @copyright 广州优匠科技有限公司
 */

@Target({ElementType.METHOD,ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
public @interface RateLimiter {

    /**
     * timeout时间内最大的访问次数，默认5次
     */
    int max() default 5;

    /**
     * 设置超时时间，默认1分钟
     */
    int timeout() default 1;

    /**
     * 流量限制类型，默认是session
     * @return
     */
    LimiterType type() default LimiterType.SESSION;

    /**
     * 访问次数存储类型，默认是session,当是redis时，需要设置redis相关配置
     * @return
     */
    StoreType store() default StoreType.SESSION;

    /**
     * 流量限制类型
     */
    public enum LimiterType {
        SESSION,IP
    }

    /**
     * 存储类型
     */
    public enum StoreType{
        SESSION,REDIS
    }
}
